/*
 * state.h
 *
 *  Created on: Oct 13, 2009
 *      Author: scott
 */

#ifndef STATE_H_
#define STATE_H_

#include "SDL/SDL.h"
#include "constants.h"
#include <vector>
#include "creeps.h"
#include "tower.h"

using namespace std;

extern SDL_Surface *screen;
extern GameStatesType nextState;
extern SDL_Event event;

class State
{
public:
	virtual void handle_events() =0;
	virtual void logic() =0;
	virtual void render() =0;
	virtual ~State(){};
};

class TitleScreen: public State
{
private:
	SDL_Surface *background;
public:
	void handle_events();
	void logic();
	void render();
	TitleScreen();
	~TitleScreen();
};

class Playing: public State
{
private:
	vector<Creep*> creeps;
	vector<Tower*> towers;

public:
	void handle_events();
	void logic();
	void render();
	Playing();
	~Playing();
};

class Waiting: public State
{
public:
	void handle_events();
	void logic();
	void render();
	Waiting();
	~Waiting();
};




#endif /* STATE_H_ */
